namespace ContentRenderingApi
{
    /// <summary/>
    internal static class Constant
    {
        // default constants
        internal const int DEFAULT_LENGTH = 0;
        internal const int DEFAULT_POSITION = 0;
        internal const char DEFAULT_ESCAPE_SPECIAL_CHARACTER = '$';
        internal const char DEFAULT_START_SPECIAL_CHARACTER = '[';
        internal const char DEFAULT_END_SPECIAL_CHARACTER = ']';
        internal const char DEFAULT_CHILD_SPECIAL_CHARACTER = '.';
        internal const char DEFAULT_SUBSTITUTION_SPECIAL_CHARACTER = ':';
        internal const char DEFAULT_IF_NOT_SPECIAL_CHARACTER = '!';
        internal const char DEFAULT_IF_SPECIAL_CHARACTER = '?';
        internal const char DEFAULT_PARENT_SPECIAL_CHARACTER = '*';
        internal const char DEFAULT_TRANSPARENT_SPECIAL_CHARACTER = '~';
        internal const string DEFAULT_PREPROCESSING_IMPORT_START_SEPERATOR = "<+>";
        internal const string DEFAULT_PREPROCESSING_IMPORT_END_SEPERATOR = "</+>";
        internal const string DEFAULT_PREPROCESSING_GET_SET_CONSTANT_START_SEPERATOR = "<=>";
        internal const string DEFAULT_PREPROCESSING_GET_SET_CONSTANT_END_SEPERATOR = "</=>";
        internal const string DEFAULT_PREPROCESSING_GET_SET_CONSTANT_CENTER_SEPERATOR = "=";
        internal const string DEFAULT_PREPROCESSING_GET_SET_FLAG_START_SEPERATOR = "<|>";
        internal const string DEFAULT_PREPROCESSING_GET_SET_FLAG_END_SEPERATOR = "</|>";
        internal const string DEFAULT_PREPROCESSING_GET_SET_FLAG_CENTER_SEPERATOR = "|";
        
        // exception constants
        internal const string EXCEPTION_NODE_DOES_NOT_HAVE_CONTAINER = "The node is not a container node";
        internal const string EXCEPTION_NODE_DOES_NOT_HAVE_TAG_LEVEL = "The node does not have a level attribute";
        internal const string EXCEPTION_NODE_DOES_NOT_HAVE_TAG = "The node is not a tag node";
        internal const string EXCEPTION_NODE_DOES_NOT_HAVE_CONTENT = "The node is not a content node";
        internal const string EXCEPTION_NODE_DOES_NOT_HAVE_TAG_NAME = "The node does not have a name attribute";
        internal const string EXCEPTION_TEMPLATE_DOES_NOT_EXIST = "The template '{0}' does not exist";
        internal const string EXCEPTION_TEMPLATE_ALREADY_EXISTS = "The template '{0}' already exists";
        internal const string EXCEPTION_PATH_DOES_NOT_HAVE_PARTIAL_NAME = "The path does not have a partial name property";
        internal const string EXCEPTION_PATH_DOES_NOT_HAVE_FULL_NAMES = "The path does not have a full names property";
        internal const string EXCEPTION_SPECIAL_CHARACTERS_NOT_UNIQUE = "The special characters are not unique";
        internal const string EXCEPTION_PREPROCESSING_SEPARATORS_NOT_UNIQUE = "The preprocessing separators are not unique";
        internal const string EXCEPTION_PREPROCESSING_SEPARATORS_INVALID = "The preprocessing separators are invalid";

        // format constants
        internal const string FORMAT_ADD_PARENT_SUBSTITUTION_TAG = "AddParentSubstitutionTag:{0}";
        internal const string FORMAT_ADD_PARENT_TRANSPARENT_TAG = "AddParentTransparentTag:{0}";
        internal const string FORMAT_ADD_PARENT_IF_TAG = "AddParentIfTag:{0}";
        internal const string FORMAT_ADD_PARENT_IF_NOT_TAG = "AddParentIfNotTag:{0}";
        internal const string FORMAT_ADD_PARENT_OUTPUT_TAG = "AddParentOutputTag:{0}";
        internal const string FORMAT_ADD_CHILD_SUBSTITUTION_TAG = "AddChildSubstitutionTag:{0}";
        internal const string FORMAT_ADD_CHILD_TRANSPARENT_TAG = "AddChildTransparentTag:{0}";
        internal const string FORMAT_ADD_CHILD_IF_TAG = "AddChildIfTag:{0}";
        internal const string FORMAT_ADD_CHILD_IF_NOT_TAG = "AddChildIfNotTag:{0}";
        internal const string FORMAT_ADD_CHILD_OUTPUT_TAG = "AddChildOutputTag:{0}";
        internal const string FORMAT_ADD_ROOT_SUBSTITUTION_TAG = "AddRootSubstitutionTag:{0}";
        internal const string FORMAT_ADD_ROOT_TRANSPARENT_TAG = "AddRootTransparentTag:{0}";
        internal const string FORMAT_ADD_ROOT_IF_TAG = "AddRootIfTag:{0}";
        internal const string FORMAT_ADD_ROOT_IF_NOT_TAG = "AddRootIfNotTag:{0}";
        internal const string FORMAT_ADD_ROOT_OUTPUT_TAG = "AddRootOutputTag:{0}";

        // compare constants
        internal const int COMPARE_EQUAL = 0;
        internal const int COMPARE_LEFT = -1;
        internal const int COMPARE_RIGHT = 1;
        
        // everything else
        internal const string FULL_NAME_JOIN = "{0}.{1}.tem";
        internal const string TEMPLATE_SEPARATOR = "/";
        internal const string RESOURCE_SEPARATOR = ".";
    }
}

